/*
  学习目标：自行实现Partial 和 Readonly
  需求:  从已有的对象结构中,  生成新的对象结构, 并且键名保持一直
*/

type Person = {
  name: string;
  age: number;
  gender: string;
};

// 💥 映射类型不能用在interface中
// interface Ixxx<T> {
//   [key in keyof T]: string
// }

type MyPartial<T> = {
  // 1. 如何从已有结构中, 生成新的对象结构 - 映射
  // 2. 可选的标识
  [key in keyof T]?: T[key];
  // 3. 指定值的类型
};

type MyReadonly<T> = {
  readonly [P in keyof T]: T[P];
};

const zs: Partial<Person> = {
  name: 'zs',
  age: 18,
};
